home *** CD-ROM | disk | FTP | other *** search
/ Programming Sound Cards / Programming Sound Cards.iso / sound_58 / sb.h < prev    next >
C/C++ Source or Header  |  1995-01-01  |  4KB  |  145 lines

  1. #ifndef _SB_H_
  2. #define _SB_H_
  3.  
  4. #include <go32.h>
  5. #include <dpmi.h>
  6.  
  7. /*
  8.  * Offsets relative to base I/O address.
  9.  */
  10. #define SB_LEFT_FM_STATUS    0x00    /* Pro only */
  11. #define SB_LEFT_FM_ADDRESS    0x00    /* Pro only */
  12. #define SB_LEFT_FM_DATA        0x01    /* Pro only */
  13. #define SB_RIGHT_FM_STATUS    0x02    /* Pro only */
  14. #define SB_RIGHT_FM_ADDRESS    0x02    /* Pro only */
  15. #define SB_RIGHT_FM_DATA    0x03    /* Pro only */
  16. #define SB_MIXER_ADDRESS    0x04    /* Pro only */
  17. #define SB_MIXER_DATA        0x05    /* Pro only */
  18. #define SB_DSP_RESET        0x06
  19. #define SB_FM_STATUS        0x08
  20. #define SB_FM_ADDRESS        0x08
  21. #define SB_FM_DATA        0x09
  22. #define SB_DSP_READ_DATA    0x0A
  23. #define SB_DSP_WRITE_DATA    0x0C
  24. #define SB_DSP_WRITE_STATUS    0x0C
  25. #define SB_DSP_DATA_AVAIL    0x0E
  26. #define SB_CD_ROM_DATA        0x10    /* Pro only */
  27. #define SB_CD_ROM_STATUS    0x11    /* Pro only */
  28. #define SB_CD_ROM_RESET        0x12    /* Pro only */
  29. #define SB_CD_ROM_ENABLE    0x13    /* Pro only */
  30.  
  31. #define SB_ADLIB_FM_STATUS    0x388
  32. #define SB_ADLIB_FM_ADDRESS    0x388
  33. #define SB_ADLIB_FM_DATA    0x389
  34.  
  35. /* Defines for 8237 DMA Controller IO addresses */
  36. #define SB_DMA        0
  37. #define SB_CH0_BASE    (SB_DMA+0)
  38. #define SB_CH0_COUNT    (SB_DMA+1)
  39. #define SB_CH1_BASE    (SB_DMA+2)
  40. #define SB_CH1_COUNT    (SB_DMA+3)
  41. #define SB_CH2_BASE    (SB_DMA+4)
  42. #define SB_CH2_COUNT    (SB_DMA+5)
  43. #define SB_CH3_BASE    (SB_DMA+6)
  44. #define SB_CH3_COUNT    (SB_DMA+7)
  45. #define SB_DMA_STATUS    (SB_DMA+8)
  46. #define SB_DMA_CMD    (SB_DMA+8)
  47. #define SB_DMA_REQUEST    (SB_DMA+9)
  48. #define SB_DMA_MASK    (SB_DMA+10)
  49. #define SB_DMA_MODE    (SB_DMA+11)
  50. #define SB_DMA_FF    (SB_DMA+12)
  51. #define SB_DMA_TMP    (SB_DMA+13)
  52. #define SB_DMA_CLEAR    (SB_DMA+13)
  53. #define SB_DMA_CLRMSK    (SB_DMA+14)
  54. #define SB_DMA_WRMSK    (SB_DMA+15)
  55. #define SB_DMAPAGE    0x80
  56.  
  57. /* Types of Soundblaster Cards */
  58. #define SB_TYPE_15    1
  59. #define SB_TYPE_PRO    2
  60. #define SB_TYPE_20    3
  61.  
  62. /* DSP Commands */
  63. #define SB_DIRECT_8_BIT_DAC    0x10
  64. #define SB_DMA_8_BIT_DAC    0x14
  65. #define SB_DMA_2_BIT_DAC    0x16
  66. #define SB_DMA_2_BIT_REF_DAC    0x17
  67. #define SB_DIRECT_ADC        0x20
  68. #define SB_DMA_ADC        0x24
  69. #define SB_MIDI_READ_POLL    0x30
  70. #define SB_MIDI_READ_IRQ    0x31
  71. #define SB_MIDI_WRITE_POLL    0x38
  72. #define SB_TIME_CONSTANT    0x40
  73. #define SB_DMA_4_BIT_DAC    0x74
  74. #define SB_DMA_4_BIT_REF_DAC    0x75
  75. #define SB_DMA_26_BIT_DAC    0x76
  76. #define SB_DMA_26_BIT_REF_DAC    0x77
  77. #define SB_HALT_DMA        0xD0
  78. #define SB_CONTINUE_DMA        0xD4
  79. #define SB_SPEAKER_ON        0xD1
  80. #define SB_SPEAKER_OFF        0xD3
  81. #define SB_DSP_ID        0xE0
  82. #define SB_DSP_VER        0xE1
  83. #define SB_MDAC1        0x61
  84. #define SB_MDAC2        0x62
  85. #define SB_MDAC3        0x63
  86. #define SB_MDAC4        0x64
  87. #define SB_MDAC5        0x65
  88. #define SB_MDAC6        0x66
  89. #define SB_MDAC7        0x67
  90.  
  91. #define SB_SET_BLOCKSIZE    0x48
  92. #define SB_HIGH_DMA_8_BIT_DAC    0x91
  93. #define SB_HIGH_DMA_8_BIT_ADC    0x99
  94.  
  95. /* Card parameters */
  96. extern unsigned int    sb_ioaddr;
  97. extern unsigned int    sb_irq;
  98. extern unsigned int    sb_dmachan;
  99. extern unsigned int    sb_type;
  100.  
  101. #define sb_writedac(x) {                        \
  102.     while(inportb(sb_ioaddr + SB_DSP_WRITE_STATUS) & 0x80);        \
  103.     outportb(sb_ioaddr + SB_DSP_WRITE_DATA, (x));            \
  104. }
  105.  
  106. #define sb_writemixer(x, y) {                        \
  107.     outportb(sb_ioaddr + SB_MIXER_ADDRESS, (x));            \
  108.     outportb(sb_ioaddr + SB_MIXER_DATA, (y));            \
  109. }
  110.  
  111. void sb_intr_rec(_go32_dpmi_registers *reg);
  112. void sb_empty_buffer(register unsigned n);
  113. void sb_rec_buffer(register unsigned n);
  114. unsigned long sb_rec(unsigned char *data, unsigned long length);
  115.  
  116. void sb_intr_play(_go32_dpmi_registers *reg);
  117. void sb_fill_buffer(register unsigned n);
  118. void sb_play_buffer(register unsigned n);
  119. void sb_play(unsigned char *data, unsigned long length);
  120.  
  121. void sb_set_sample_rate(unsigned int rate);
  122. void sb_voice(int state);
  123. void sb_getparams();
  124. int sb_initcard();
  125. int sb_init_buffers();
  126. int sb_init();
  127. int sb_read_dac(int Base);
  128.  
  129. void sb_install_interrupts(void (*sb_intr)(_go32_dpmi_registers *));
  130. void sb_install_rm_interrupt(void (*sb_intr)(_go32_dpmi_registers *));
  131. void sb_cleanup_rm_interrupt();
  132. void sb_install_pm_interrupt(void (*sb_intr)(_go32_dpmi_registers *));
  133. void sb_cleanup_pm_interrupt();
  134. void sb_cleanup_ints();
  135. int sb_cleanup();
  136.  
  137. void SoundPlay(int Rate, char *data, unsigned long length);
  138. unsigned long SoundRec(int Rate, char *data, unsigned long length);
  139.  
  140. int sb_read_counter(void);
  141. void sb_reset(void);
  142. void kbclear(void);
  143.  
  144. #endif
  145.